﻿using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using BLL;

namespace Web.forms
{
    public partial class SeleccionPeriodo : Pagina
    {
        private IList<Periodo> GetTablaPeriodos(bool Refresh = false)
        {
            if (Refresh)
                ViewState["mTablaPeriodos"] = BLL.Periodos.ObtenerPeriodos(ref mMensaje);
            else
                if (ViewState["mTablaPeriodos"] == null)
                    ViewState["mTablaPeriodos"] = BLL.Periodos.ObtenerPeriodos(ref mMensaje);

            return (IList<Periodo>)ViewState["mTablaPeriodos"];
        }

        private void GetPeriodos()
        {
            grvPeriodos.DataSource = GetTablaPeriodos(true);
            grvPeriodos.DataBind();
            grvPeriodos.Focus();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            LockScreenAfterClick(btnSeleccionar);
            LockScreenAfterClick(btnGrabar);
            
            if (IsPostBack) return;
                
            GetPeriodos();
        }

        protected void grvPeriodos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType != DataControlRowType.DataRow) return;

            var vButtonSeleccionar = (ImageButton) e.Row.FindControl("btnSeleccionar");

            if (vButtonSeleccionar != null)
                vButtonSeleccionar.OnClientClick =
                    "if (!confirm('¿Desea trabajar con el período seleccionado?')) return false;";

            string strScript = "uncheckOthers(" + e.Row.Cells[0].FindControl("chkSeleccionar").ClientID + ");";
            ((CheckBox)e.Row.Cells[0].FindControl("chkSeleccionar")).Attributes.Add("onclick", strScript);
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            if (txtNuevoPeriodo.Text.Trim().Length <= 0)
            {
                PopUpMessage("Ingrese una fecha Período en formato yyyymmdd (yyyy - Año, mm - Mes, dd = Día)");
                return;
            }

            if (txtDescripcionNuevoPeriodo.Text.Trim().Length <= 0)
            {
                PopUpMessage("Ingrese una descripción para el Período");
                return;
            }

            var vPeriodoActual = new Periodo(txtNuevoPeriodo.Text, txtDescripcionNuevoPeriodo.Text, null, 1);

            if (!vPeriodoActual.Grabar())
            {
                PopUpMessage(vPeriodoActual.Mensaje);
                return;
            }

            btnNuevo.Enabled = true;
            divNuevoPeriodo.Visible = false;
            btnGrabar.Enabled = false;
            btnGrabar.Visible = false;

            grvPeriodos.Enabled = true;

            btnSeleccionar.Visible = true;

            PeriodoActual = vPeriodoActual;

            ActualizarPeriodo();

            GetPeriodos();

            PopUpMessage("Se ha almacenado el período de manera exitosa");
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            btnNuevo.Enabled = false;
            divNuevoPeriodo.Visible = true;
            btnSeleccionar.Visible = false;
            btnSeleccionar.Enabled = false;
            btnGrabar.Enabled = true;
            btnGrabar.Visible = true;

            grvPeriodos.Enabled = false;
            txtNuevoPeriodo.Text = DateTime.Now.ToString("yyyyMMdd");
            txtNuevoPeriodo.Focus();
        }

        protected Periodo GetPeriodoSeleccionado()
        {
            Periodo retorno = null;

            foreach (GridViewRow gvrow in grvPeriodos.Rows)
            {
                var chkTmp = (CheckBox)gvrow.FindControl("chkSeleccionar");

                if (chkTmp == null) continue;

                if (!chkTmp.Checked) continue;

                if (gvrow.FindControl("lblPeriodo") == null) continue;

                retorno =
                    new Periodo(((Label) gvrow.FindControl("lblPeriodo")).Text);
                break;
            }

            return retorno;
        }

        protected void btnSeleccionar_Click(object sender, EventArgs e)
        {
            var tmpPeriodo = GetPeriodoSeleccionado();

            if (tmpPeriodo == null)
            {
                PopUpMessage("Primero, debe seleccionar un período dentro de la lista desplegada");
                return;
            }

            PeriodoActual = tmpPeriodo;

            ActualizarPeriodo();

            PopUpMessage(string.Format("El período \'{0}\' ha sido establecido exitosamente",
                                       PeriodoActual.Glosa));
        }

        protected void ActualizarPeriodo()
        {
            var tmpMaster = (Main) Page.Master;

            if (tmpMaster == null) return;

            tmpMaster.ActualizaInfoPeriodo();
            tmpMaster.ActualizaPeriodoMenu();
        }
    }
}